#ifndef _VL_VALID_METHOD__H_
#define _VL_VALID_METHOD__H_

#include "vl_valid.h"
#include "vl_container.h"

namespace VL {

/**
 * @Author: CimZzz
 * @Date: 2022-08-13 07:24:56
 * 
 * 验证基本方法定义集合
 */
class ValidCommonMethod {
private:
	/**
	 * @Author: CimZzz
	 * @Date: 2022-08-13 07:25:13
	 * 
	 * 私有化构造函数, 不支持实例化
	 */
	ValidCommonMethod();

public:

	/**
	 * @Author: CimZzz
	 * @Date: 2022-08-12 11:27:39
	 * 
	 * 时间戳验证方法
	 * 
	 * @param prop 属性指针
	 * @param data 时间戳数据指针
	 * 
	 * @return 验证一致返回 true
	 * 
	 */
	static bool validTsFunc(const std::shared_ptr<VLProp>& prop, int64_t* data);

	/**
	 * @Author: CimZzz
	 * @Date: 2022-08-12 11:28:54
	 * 
	 * 时间戳写入方法
	 * 
	 * @param mapProp 属性表指针
	 * @param key 验证项 Key 值
	 * @param data 时间戳数据指针
	 */
	static void overrideTsFunc(MapProp* mapProp, const std::string& key, int64_t* data);

	/**
	 * @Author: CimZzz
	 * @Date: 2022-08-12 11:30:45
	 * 
	 * 字符串验证方法
	 * 
	 * @param prop 属性指针
	 * @param data 字符串数据指针
	 * 
	 * @return 验证一致返回 true
	 */
	static bool validStrFunc(const std::shared_ptr<VLProp>& prop, std::string* data);

	/**
	 * @Author: CimZzz
	 * @Date: 2022-08-12 11:28:54
	 * 
	 * 字符串写入方法
	 * 
	 * @param mapProp 属性表指针
	 * @param key 验证项 Key 值
	 * @param data 字符串数据指针
	 */
	static void overrideStrFunc(MapProp* mapProp, const std::string& key, std::string* data);

	/**
	 * @Author: CimZzz
	 * @Date: 2022-08-13 07:26:16
	 * 
	 * 文件池验证方法
	 * 
	 * @param prop 属性指针
	 * @param data 文件池指针
	 * 
	 * @return 验证一致返回 true
	 * 
	 * @note 要求属性类型必须为 Map
	 */
	static bool validFilePoolFunc(const std::shared_ptr<VLProp>& prop, FilePool* data);

	/**
	 * @Author: CimZzz
	 * @Date: 2022-08-13 07:29:53
	 * 
	 * 文件列表验证方法
	 * 
	 * @param prop 属性指针
	 * @param data 文件池指针
	 * 
	 * @return 验证一致返回 true
	 * 
	 * @note 要求属性类型必须为 Map
	 */
	static bool validFileListFunc(const std::shared_ptr<VLProp>& prop, std::vector<std::shared_ptr<FileWrapper>>* data);

	/**
	 * @Author: CimZzz
	 * @Date: 2022-08-13 07:30:48
	 * 
	 * 文件列表写入方法
	 * 
	 * @param mapProp 属性表指针
	 * @param key 验证项 Key 值
	 * @param data 文件列表指针
	 */
	static void overrideFileListFunc(MapProp* mapProp, const std::string& key, std::vector<std::shared_ptr<FileWrapper>>* data);

	/**
	 * @Author: CimZzz
	 * @Date: 2022-08-13 07:30:48
	 * 
	 * 文件列表写入方法, 如果存在依赖文件, 则以首个依赖文件的时间作为评判标准
	 * 
	 * @param mapProp 属性表指针
	 * @param key 验证项 Key 值
	 * @param data 文件列表指针
	 */
	static void overrideFileListDepFirstFunc(MapProp* mapProp, const std::string& key, std::vector<std::shared_ptr<FileWrapper>>* data);

	/**
	 * @Author: CimZzz
	 * @Date: 2022-08-13 07:29:53
	 * 
	 * 文件列表验证方法, 使用文件全路径作为键值
	 * 
	 * @param prop 属性指针
	 * @param data 文件池指针
	 * 
	 * @return 验证一致返回 true
	 * 
	 * @note 要求属性类型必须为 Map
	 */
	static bool validFileListWithFullPathFunc(const std::shared_ptr<VLProp>& prop, std::vector<std::shared_ptr<FileWrapper>>* data);

	/**
	 * @Author: CimZzz
	 * @Date: 2022-08-13 07:30:48
	 * 
	 * 文件列表写入方法, 使用文件全路径作为键值
	 * 
	 * @param mapProp 属性表指针
	 * @param key 验证项 Key 值
	 * @param data 文件列表指针
	 */
	static void overrideFileListWithFullPathFunc(MapProp* mapProp, const std::string& key, std::vector<std::shared_ptr<FileWrapper>>* data);

	/**
	 * @Author: CimZzz
	 * @Date: 2022-08-22 08:58:22
	 * 
	 * 文件列表验证方法, 使用文件全路径作为键值
	 * 
	 * @param prop 属性指针
	 * @param data 文件列表漫步者指针
	 * 
	 * @return 验证一致返回 true
	 * 
	 * @note 已过期文件会保存在组 1, 不存在的文件会保存在组 2
	 */
	static bool validFileListWithFullPathAndCollectFunc(const std::shared_ptr<VLProp>& prop, FileWrapperWalker* data);

	/**
	 * @Author: CimZzz
	 * @Date: 2022-08-22 08:58:22
	 * 
	 * 文件列表验证方法, 使用文件全路径作为键值, 如果存在依赖文件, 则以首个依赖文件的时间作为评判标准
	 * 
	 * @param prop 属性指针
	 * @param data 文件列表漫步者指针
	 * 
	 * @return 验证一致返回 true
	 * 
	 * @note 已过期文件会保存在组 1, 不存在的文件会保存在组 2
	 */
	static bool validFileListWithFullPathAndCollectDepFirstFunc(const std::shared_ptr<VLProp>& prop, FileWrapperWalker* data);
};

}

#endif // _VL_VALID_METHOD__H_
